package entity;

import entity.Instruction;
import entity.Page;

import java.util.LinkedList;

public class MainMemory {

    //链表存储调入主存的页
    public LinkedList<Page> list=new LinkedList<Page>();

    //初始化
    public void init(Page[] page) {
        for(int i=0;i<=3;i++) {     //主存大小为4
            list.add(page[i]);
        }
    }

    //缺页中断处理 先进先出
    public void FIFO(Instruction job, Page[] page) {
        //去掉链表首元素
        char alter=list.get(0).getBlockNo();//获取块号
        list.get(0).setFlag(0); //标志置为0
        list.get(0).setBlockNo('*'); //将主存块号置为*
        if(list.get(0).modify==1)
            System.out.println("        out "+list.get(0).pageNo);
        list.remove(0);

        //链表尾部插入新页
        int xuyao=job.pageNo;//获取所需页的页号
        for(int i=0;i<=6;i++) {
            if(page[i].getPageNo()==xuyao) {
                page[i].setBlockNo(alter);//分配块号
                page[i].setFlag(1);//标志置为1
                list.addLast(page[i]);
                System.out.println("        in "+job.pageNo);
                return;
            }
        }
        System.out.println("没有找到页号");
    }


    //展示主存中所存页的页表
    public void displayList() {
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        for(int m=0;m<=3;m++) {
            System.out.println(list.get(m));
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

    }


}